Page({
  data: {
    userInput: '', // 用户输入的内容
    messages: [], // 聊天消息数组
    availableModels: ['gpt-3.5-turbo', 'gpt-4-0613'], // 可用的模型列表
    modelIndex: 0, // 当前选中的模型索引
    accumulatedData: '', // 初始化一个变量来累积数据
    inputDisabled: false, // 输入框是否禁用
  },

  // 绑定输入框的数据
  bindInput(e) {
    this.setData({
      userInput: e.detail.value
    });
  },

  // 发送消息到GPT服务器
  sendToGPT() {
    const { userInput, availableModels, modelIndex } = this.data;
    if (!userInput.trim()) return; // 输入为空时不处理

    this.setData({
      messages: [...this.data.messages, { role: 'user', content: userInput }],
      userInput: '', // 清空输入框
      inputDisabled: true, // 禁用输入框
      accumulatedData: '' // 清空之前累积的数据
    });

    wx.request({
      url: 'http://carrywu.fun/gpt', // 修改后的API路径
      method: 'POST',
      header: {
        'Content-Type': 'application/json' // 设置请求头部为JSON格式
      },
      data: {
        messages: [
          { role: 'system', content: '你是一个健身房教练，你能提供详细的健身计划和营养建议，你可以拒绝回答与你的专业无关的问题！' },
          { role: 'user', content: userInput }
        ],
        max_tokens: 2000,
        model: availableModels[modelIndex],
        stream: true // 设置为流式
      },
      success: (response) => {
        const lines = response.data.split('\n');
        let accumulatedData = this.data.accumulatedData;
        lines.forEach(line => {
          if (line.trim()) {
            const data = line.replace(/^data: /, '');
            if (data !== '[DONE]') {
              try {
                const parsed = JSON.parse(data);
                if (parsed.choices && parsed.choices[0] && parsed.choices[0].delta && parsed.choices[0].delta.content) {
                  accumulatedData += parsed.choices[0].delta.content;
                }
              } catch (e) {
                console.error('Parsing error:', e);
              }
            } else {
              this.setData({
                messages: [...this.data.messages, { role: 'assistant', content: accumulatedData }],
                inputDisabled: false,
                accumulatedData: ''
              });
            }
          }
        });
      },
      fail: (error) => {
        console.error('Error communicating with GPT:', error);
        this.setData({
          messages: [...this.data.messages, { role: 'assistant', content: '与GPT通信时发生错误，请重试。' }],
          inputDisabled: false
        });
      }
    });
  },

  // 模型选择器改变事件
  changeModel(e) {
    this.setData({
      modelIndex: e.detail.value
    });
  }
});
